/***
 * @Description:本文件是基于消息队列的网络数据交换处理机制实现的头文件
 * @Author: Liverpool
 * @Date: 2024-01-21 01:41:53
 * @LastEditTime: 2024-01-21 02:18:00
 * @LastEditors: Liverpool
 */
#ifndef MESSAGE_HAND_H
#define MESSAGE_HAND_H

#include "netComman.h"
#include "sys_plat.h"
#include "debug.h"
#include "fix_queue.h"
#include "memory_block.h"
#include "net_Interface.h"

// 关于网络接口的一些消息
typedef struct _message_net_interface_t
{
    D_Net_Interface *netif; // 网络接口的内存地址
} D_Message_Netif;

// 定义请求工作线程执行函数的函数指针
struct _message_func;
typedef net_err_t (*message_hander_func)(struct _message_func *msg);

// 应用程序请求工作线程执行函数的的消息类型定义
typedef struct _message_func
{
    sys_thread_t thread;      // 请求的线程id
    message_hander_func func; // 请求函数
    void *param;              // 运行的参数
    net_err_t err;            // 请求函数的执行结果

    sys_sem_t wait_sem; // 同步信号量，用来等待请求函数执行
} D_Message_Func;

// 定义网络数据传输包
typedef struct message_t
{
    D_ListNode ndoe; // 测试占位
    enum
    {
        NET_Message_NETIF_In, // 由网络数据接口传入的
        NET_Message_Func,     // 应用程序的请求函数
    } type;
    union
    {
        D_Message_Netif msg_netif;
        D_Message_Func *func;
    };

} D_NetMessage;
net_err_t message_handler_init(void);                                          // 初始化消息处理工作机制的工作线程
net_err_t message_handler_start(void);                                         // 消息处理工作机制的工作线程的启动
net_err_t message_handler_netif_in(D_Net_Interface *netif);                    // 消息队列从网卡读取数据包
net_err_t message_handler_func_execute(message_hander_func func, void *param); // 应用程序执行的请求函数执行函数

#endif // !MESSAGE_HAND_H